package com.dtt.learning.service;


import com.dtt.learning.model.DemoModel;
import com.dtt.learning.repository.DemoModelRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import java.util.List;


/**
 * 示例如何使用JPA操作数据库的Rest接口类
 */
@RestController
@RequestMapping("/demo")
public class DemoModelService {


    /**
     * 用@Autowired自动注入DemoModel的数据库接口，不嫩使用new方式！！！
     */
    @Autowired
    private DemoModelRepository demoRepository;


    @PostConstruct
    public void init() {
        DemoModel model1 = new DemoModel();
        model1.setDemoId("1");
        model1.setDemoLength(1);
        model1.setDemoName("a");
        DemoModel model2 = new DemoModel();
        model2.setDemoId("2");
        model2.setDemoLength(2);
        model2.setDemoName("b");
        DemoModel model3 = new DemoModel();
        model3.setDemoId("3");
        model3.setDemoLength(3);
        model3.setDemoName("c");

        /**
         * 新增或者更新一个记录只需要执行JpaRepository内置的接口函数save(T)即可，参数为实体类
         */
        demoRepository.save(model1);
        demoRepository.save(model2);
        demoRepository.save(model3);

        /**
         * 更新示例
         *
         * <pre>
         *     根据ID查询一个记录，修改记录的名称为旧名称 + "_123"
         * </pre>
         */
        DemoModel m = demoRepository.findOne("1");
        m.setDemoName(m.getDemoName() + "_123");
        // 更新
        demoRepository.save(m);
    }


    @GetMapping("/all")
    public List<DemoModel> queryAll() {
        /*
         * JpaRepository接口内置几个接口函数，可以直接调用。函数的作用可以通过函数名来表达。
         */
        return demoRepository.findAll();
    }

    @GetMapping("/{name}")
    public DemoModel queryOne(@PathVariable("name") String demoName) {
        /*
        注意定义的数据库接口要符合规范，否则会报错
         */
        return demoRepository.findByDemoName(demoName);
    }

}
